package Thread;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

//线程池七大参数的使用
public class ThreadPoolDemo {
    public static void main(String[] args) {
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
                //核心线程数
                2,
                //最大线程数
                4,
                //存货时间
                60,
                //时间单位
                TimeUnit.SECONDS,
                //任务队列
                new ArrayBlockingQueue<>(6),
                //拒绝策略
                new ThreadPoolExecutor.AbortPolicy()
                //除此之外还有自定义线程工厂
        );

        // 2. 定义10个任务（提交到线程池）
        for (int i = 1; i <= 10; i++) {
            final int taskId = i;
            threadPool.execute(() -> {
                System.out.println(Thread.currentThread().getName()
                        + " 执行任务: " + taskId);
                try {
                    // 模拟任务执行耗时1秒
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }

        // 3. 关闭线程池（等待现有任务完成）
        threadPool.shutdown(); // 停止接收新任务
        try {
            // 等待30秒让所有任务完成
            if (!threadPool.awaitTermination(30, TimeUnit.SECONDS)) {
                // 超时后强制关闭
                threadPool.shutdownNow();
            }
        } catch (InterruptedException e) {
            threadPool.shutdownNow();
        }
    }
}
